/*
 * ControlPoint.h
 *
 *  Created on: 2010-9-8
 *      Author: wenjian
 */

#ifndef CONTROLPOINT_H_
#define CONTROLPOINT_H_


#include "../../../commons.h"
#include "../../../gdiplus/gdraw.h"
#include "AbstractShape.h"
#include "Shape.h"


using namespace Ed;
using namespace Thk;

namespace S {
  class WorkLayer;

  /**
   * 控制点
   */
  class ControlPoint: public AbstractShape {
    public:
      ControlPoint(int index, Shape* shape);
      //ControlPoint(int index, Shape* shape, real centerX, real centerY, real x, real y, real w, real h);
      virtual ~ControlPoint();

      /**
       * 类型ID
       */
      static unsigned long ClassId;
      /**
       * 类型检查
       */
      bool isInstanceOf(unsigned long classId){
        return ControlPoint::ClassId == classId;
      }

//      /**
//       * 宽度
//       */
//      virtual real width() const{
//        return _w;
//      }
//
//      /**
//       * 设置宽度
//       */
//      virtual void setWidth(real w){
//        if(_w != w){
//          _w = w;
//          setModified(true);
//        }
//      }
//
//      /**
//       * 高度
//       */
//      virtual real height() const{
//        return _h;
//      }
//
//      /**
//       * 设置高度
//       */
//      virtual void setHeight(real h){
//        if(_h != h){
//          _h = h;
//          setModified(true);
//        }
//      }

      /**
       * 返回中心点
       */
      Gdiplus::PointF& getCenter(){
        return center;
      }

      void setData(real centerX, real centerY, real x, real y, real w, real h);

      /**
       * 构建路径
       */
      virtual void createPath();

      /**
       * 绘制此元素
       */
      virtual void draw(Gdiplus::Graphics* g);

//      virtual const Gdiplus::RectF* getBoundRect();

      Shape* getShape(){
        return shape;
      }

      int getIndex(){
        return index;
      }

      void setIndex(int idx){
        index = idx;
      }

      void setUpDownCursor(){
        setCursor(&upDownCursor);
      }

      void setLeftRightCursor(){
        setCursor(&leftRightCursor);
      }

      void setLowerLeftCursor(){
        setCursor(&lowerLeftCursor);
      }

      void setLowerRightCursor(){
        setCursor(&lowerRightCursor);
      }

      void setCrossCursor(){
        setCursor(&crossCursor);
      }

    protected:
      virtual bool event(const Event* e);
      virtual void mouseMoveEvent(const MouseEvent* e);
      virtual void mouseLeaveEvent(const MouseEvent* e);
      virtual void mousePressEvent(const MouseEvent* e);
      virtual void mouseReleaseEvent(const MouseEvent* e);

    private:
//      /**
//       * 设置鼠标在控制点上移动时光标指针样式
//       */
//      void setMoveCursorStyle();

      /**
       * 初始化光标样式
       */
      void initCursorStyle(int index);

    private:
//      //宽度，高度
//      real _w, _h;
      //路径
      Gdiplus::GraphicsPath* path;
      //画笔
      Gdiplus::Pen* pen;
      //刷子
      Gdiplus::SolidBrush* brush;

      //在图形中的位置
      int index;
      //所在图形
      Shape* shape;
      //控制点中心点
      Gdiplus::PointF center;
      //上下箭头
      DefaultCursor upDownCursor;
      //左右箭头
      DefaultCursor leftRightCursor;
      //左下箭头
      DefaultCursor lowerLeftCursor;
      //右下箭头
      DefaultCursor lowerRightCursor;
      //十字叉
      DefaultCursor crossCursor;

  };

}

#endif /* CONTROLPOINT_H_ */
